23. 实现
实现:值迭代
在上个部分,你学习了值迭代。在此算法中,对状态空间的每次遍历都会进行策略评估和策略改进。值迭代肯定会找到任何有限 MDP 的最优策略 \pi_*。
你可以在下方找到伪代码。

注意,如果后续值函数估值之间的差值很小,则满足了停止条件。尤其是,如果对于每个状态,差值都小于 \theta,则循环终止。并且,如果我们希望最终值函数估值与最优值函数越接近,则需要将值 \theta 设得越小。
你可以在你的实现中将 \theta 设成各种值;注意,对于 FrozenLake 环境,1e-8
左右的值似乎很合适。
如果你想详细了解如何设置 \theta 的值,建议阅读这篇论文,并重点看看 Theorem 3.2。他们的主要结果可以总结如下:
用 V^{\text{final}} 表示算法计算的最终值函数估值。然后可以发现 V^{\text{final}} 与最优值函数 v_* 之间的差值最大为 \frac{2\theta\gamma}{1-\gamma}。换句话说,对于每个 s\in\mathcal{S},
\max_{s\in\mathcal{S}}|V^{\text{final}}(s) - v_*(s)| < \frac{2\theta\gamma}{1-\gamma}。
请在下个部分完成 Dynamic_Programming.ipynb
的第 6 部分:值迭代。请记得保存内容!
你可以查看 Dynamic_Programming_Solution.ipynb
的相应部分,检查你的答案是否正确。